package com.aaa.threadadvanced.demo03;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 线程池中常用的方法
 *  shutdown和shutdownNow的区别：
     *  shutdown调用的是advanceRunState(SHUTDOWN)，而shutdownNow调用的是(STOP)，即调用后设置的线程池状态不同
     * shutdown调用的是中断空闲的Workers，而shutdownNow调用的是中断所有的Workers
     * shutdownNow会把所有任务队列中的任务取出来，返回一个任务列表。而shutdown什么都不返回。
 * @date 2022/11/2
 */
public class Test01 {
    public static void main(String[] args) {

        //延迟线程执行时间
        ExecutorService executorService = Executors.newFixedThreadPool(15);
        for (int i = 0; i < 10; i++) {
            final int a=i;
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"~~"+a);
                }
            });
        }


        //关闭线程池
        //shutdown只是将线程池的状态设置为SHUTWDOWN状态，正在执行的任务会继续执行下去，没有被执行的则中断。
        executorService.shutdownNow();

        //而shutdownNow则是将线程池的状态设置为STOP，正在执行的任务则被停止，没被执行任务的则返回。
        boolean shutdown = executorService.isShutdown();
        System.out.println("shutdown = " + shutdown);

        //isTerminated：当调用shutdownNow()方法后，成功停止后返回为true;
        //如果线程池任务正常完成，都为false
        boolean terminated = executorService.isTerminated();
        System.out.println(terminated);
    }
}
